iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 12
0
Software Development

做一個JVM語言系列 第 12

JVM .CLASS 檔的格式,JVM 語言的熱身。

  • 分享至 

  • xImage
  •  

Antlr 預設就是一個強大的語言轉換器。
仍是透過監聽LISTENER模式來處理。

只是要成為一個在JVM生態系裏生存的語言,首當要務是能編譯成.CLASS 檔。
這也是一種轉換,就像你了解一下你的目的語言,
例如OBJECT-C轉SWIFT,JAVA轉KATLIN.
你轉要理解目的語言的文法。

.CLASS 檔的格式,在The Java ® Virtual Machine Specification
我以Java SE 7 Edition為例,當然你可以看JAVA8, 或JAVA9。

第三章是Compiling for the Java Virtual Machine,為了Java 虛擬機而編譯 。
第四章就是The class File Format,javac 成 .class檔。

A class file consists of a single ClassFile structure:
一個class檔只有一個ClassFile 結構:

ClassFile {
u4    magic;
u2    minor_version;
u2    major_version;
u2    constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2    access_flags;
u2    this_class;
u2    super_class;
u2    interfaces_count;
u2    interfaces[interfaces_count];
u2    fields_count;
field_info  fields[fields_count];
u2    methods_count;
method_info methods[methods_count];
u2   attributes_count;
attribute_info attributes[attributes_count];
}

606頁的手冊裏,這章佔了250頁的篇幅。而.class檔的有效性驗証又佔了近100頁。

要做一個可以在虛擬機上跑的語言,而不是要做一個虛擬機。
所以對虛擬機的架構略懂即可。主要還是生成符合規範的.class檔。

這個.class檔像是 原始JAVA程式碼的統計表,結論。
我們一般人寫程式時,不會去注意類別裏,
用了幾個方法(methods_count);定義幾個成員(fields_count),宣告了幾個介面(interfaces_count),
而在生成.class檔,要把這些數字計算出來。計算的實作可以透過前面ANTLR的案例有點想法。


上一篇
Antlr練習,程式符號的有效性檢查(二)
系列文
做一個JVM語言12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言